#include "mymodel.h"

MyModel::MyModel(QObject *parent)
    : QAbstractTableModel(parent)
{
    // 构造函数，初始化一些数据
}

MyModel::~MyModel()
{
    // 析构函数，如果有需要清理的资源可以在这里处理
}

// 返回行数
int MyModel::rowCount(const QModelIndex &parent) const
{
    if (parent.isValid()) {
        return 0;  // 如果传入的是有效的父索引，则不返回行数
    }
    return m_data.size();  // 返回数据的行数
}

// 返回列数
int MyModel::columnCount(const QModelIndex &parent) const
{
    if (parent.isValid()) {
        return 0;  // 如果传入的是有效的父索引，则不返回列数
    }
    return m_data.isEmpty() ? 0 : m_data.first().size();  // 返回列数
}

// 返回数据
QVariant MyModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid()) {
        return QVariant();
    }

    if (role == Qt::DisplayRole) {
        return m_data.at(index.row()).at(index.column());  // 获取对应的数据
    }

    return QVariant();
}

// 返回表头数据
QVariant MyModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if (role != Qt::DisplayRole) {
        return QVariant();
    }

    if (orientation == Qt::Horizontal) {
        //return QString("Column %1").arg(section);  // 横向表头显示列号
        if(section==0)return QString("name");
        else return QString("phonenumber");
    } else {
        return QString(" %1").arg(section);  // 纵向表头显示行号
    }
}

// 设置数据（允许编辑）
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    if (role == Qt::EditRole) {
        m_data[index.row()][index.column()] = value.toString();  // 更新数据
        emit dataChanged(index, index);  // 发出数据变化信号
        return true;
    }
    return false;
}

// 返回项的标志（支持编辑）
Qt::ItemFlags MyModel::flags(const QModelIndex &index) const
{
    Qt::ItemFlags flags = QAbstractTableModel::flags(index);
    if (index.isValid()) {
        flags |= Qt::ItemIsEditable;  // 设置项为可编辑
    }
    return flags;
}

// 设置数据的方法（用于外部传入数据）
void MyModel::setData(const QVector<QVector<QString>> &data)
{
    beginResetModel();  // 在更新数据之前，通知视图重置模型
    m_data = data;
    endResetModel();  // 更新完毕，通知视图更新
}
